From a1f868f2a3bef3d349b679061da57b937ea24b1a Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Wed, 20 Jun 2007 17:05:48 +0100 Subject: [PATCH] x86: early exception enhancement In order to at least have some minimal debuging capabilities when Xen crashes really early, dump out registers and stack contents in a raw form. Signed-off-by: Jan Beulich Signed-off-by: Keir Fraser --- xen/arch/x86/boot/x86_32.S | 16 +++++++++++++++- xen/arch/x86/boot/x86_64.S | 15 +++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/boot/x86_32.S b/xen/arch/x86/boot/x86_32.S index 1220f940a5..4119d6ee1f 100644 --- a/xen/arch/x86/boot/x86_32.S +++ b/xen/arch/x86/boot/x86_32.S @@ -36,15 +36,29 @@ /* This is the default interrupt handler. */ int_msg: - .asciz "Unknown interrupt\n" + .asciz "Unknown interrupt (cr2=%08x)\n" +hex_msg: + .asciz " %08x" ALIGN ignore_int: + pusha cld mov $(__HYPERVISOR_DS),%eax mov %eax,%ds mov %eax,%es + mov %cr2,%eax + push %eax pushl $int_msg call printk + add $8,%esp + mov %esp,%ebp +0: pushl (%ebp) + add $4,%ebp + pushl $hex_msg + call printk + add $8,%esp + test $0xffc,%ebp + jnz 0b 1: jmp 1b ENTRY(stack_start) diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index d3c11b8788..46c34c1702 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -56,12 +56,23 @@ /* This is the default interrupt handler. */ int_msg: - .asciz "Unknown interrupt\n" + .asciz "Unknown interrupt (cr2=%016lx)\n" +hex_msg: + .asciz " %016lx" ignore_int: - cld + SAVE_ALL + movq %cr2,%rsi leaq int_msg(%rip),%rdi xorl %eax,%eax call printk + movq %rsp,%rbp +0: movq (%rbp),%rsi + addq $8,%rbp + leaq hex_msg(%rip),%rdi + xorl %eax,%eax + call printk + testq $0xff8,%rbp + jnz 0b 1: jmp 1b -- 2.30.2